1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.base;
18
19 import com.google.common.annotations.GwtCompatible;
20 import com.google.common.annotations.GwtIncompatible;
21 import com.google.common.base.Equivalence.Wrapper;
22 import com.google.common.collect.ImmutableList;
23 import com.google.common.testing.EqualsTester;
24 import com.google.common.testing.EquivalenceTester;
25 import com.google.common.testing.NullPointerTester;
26 import com.google.common.testing.SerializableTester;
27
28 import junit.framework.TestCase;
29
30
31
32
33
34
35 @GwtCompatible(emulated = true)
36 public class EquivalenceTest extends TestCase {
37 @SuppressWarnings("unchecked")
38 public void testPairwiseEquivalent() {
39 EquivalenceTester.of(Equivalence.equals().<String>pairwise())
40 .addEquivalenceGroup(ImmutableList.<String>of())
41 .addEquivalenceGroup(ImmutableList.of("a"))
42 .addEquivalenceGroup(ImmutableList.of("b"))
43 .addEquivalenceGroup(ImmutableList.of("a", "b"), ImmutableList.of("a", "b"))
44 .test();
45 }
46
47 public void testPairwiseEquivalent_equals() {
48 new EqualsTester()
49 .addEqualityGroup(Equivalence.equals().pairwise(), Equivalence.equals().pairwise())
50 .addEqualityGroup(Equivalence.identity().pairwise())
51 .testEquals();
52 }
53
54 private enum LengthFunction implements Function<String, Integer> {
55 INSTANCE;
56
57 @Override public Integer apply(String input) {
58 return input.length();
59 }
60 }
61
62 private static final Equivalence<String> LENGTH_EQUIVALENCE = Equivalence.equals()
63 .onResultOf(LengthFunction.INSTANCE);
64
65 public void testWrap() {
66 new EqualsTester()
67 .addEqualityGroup(
68 LENGTH_EQUIVALENCE.wrap("hello"),
69 LENGTH_EQUIVALENCE.wrap("hello"),
70 LENGTH_EQUIVALENCE.wrap("world"))
71 .addEqualityGroup(
72 LENGTH_EQUIVALENCE.wrap("hi"),
73 LENGTH_EQUIVALENCE.wrap("yo"))
74 .addEqualityGroup(
75 LENGTH_EQUIVALENCE.wrap(null),
76 LENGTH_EQUIVALENCE.wrap(null))
77 .addEqualityGroup(Equivalence.equals().wrap("hello"))
78 .addEqualityGroup(Equivalence.equals().wrap(null))
79 .testEquals();
80 }
81
82 public void testWrap_get() {
83 String test = "test";
84 Wrapper<String> wrapper = LENGTH_EQUIVALENCE.wrap(test);
85 assertSame(test, wrapper.get());
86 }
87
88 @GwtIncompatible("SerializableTester")
89 public void testSerialization() {
90 SerializableTester.reserializeAndAssert(LENGTH_EQUIVALENCE.wrap("hello"));
91 SerializableTester.reserializeAndAssert(Equivalence.equals());
92 SerializableTester.reserializeAndAssert(Equivalence.identity());
93 }
94
95 private static class IntValue {
96 private final int value;
97
98 IntValue(int value) {
99 this.value = value;
100 }
101
102 @Override public String toString() {
103 return "value = " + value;
104 }
105 }
106
107 public void testOnResultOf() {
108 EquivalenceTester.of(Equivalence.equals().onResultOf(Functions.toStringFunction()))
109 .addEquivalenceGroup(new IntValue(1), new IntValue(1))
110 .addEquivalenceGroup(new IntValue(2))
111 .test();
112 }
113
114 public void testOnResultOf_equals() {
115 new EqualsTester()
116 .addEqualityGroup(
117 Equivalence.identity().onResultOf(Functions.toStringFunction()),
118 Equivalence.identity().onResultOf(Functions.toStringFunction()))
119 .addEqualityGroup(Equivalence.equals().onResultOf(Functions.toStringFunction()))
120 .addEqualityGroup(Equivalence.identity().onResultOf(Functions.identity()))
121 .testEquals();
122 }
123
124 public void testEquivalentTo() {
125 Predicate<Object> equalTo1 = Equivalence.equals().equivalentTo("1");
126 assertTrue(equalTo1.apply("1"));
127 assertFalse(equalTo1.apply("2"));
128 assertFalse(equalTo1.apply(null));
129 Predicate<Object> isNull = Equivalence.equals().equivalentTo(null);
130 assertFalse(isNull.apply("1"));
131 assertFalse(isNull.apply("2"));
132 assertTrue(isNull.apply(null));
133
134 new EqualsTester()
135 .addEqualityGroup(equalTo1, Equivalence.equals().equivalentTo("1"))
136 .addEqualityGroup(isNull)
137 .addEqualityGroup(Equivalence.identity().equivalentTo("1"))
138 .testEquals();
139 }
140 public void testEqualsEquivalent() {
141 EquivalenceTester.of(Equivalence.equals())
142 .addEquivalenceGroup(new Integer(42), 42)
143 .addEquivalenceGroup("a")
144 .test();
145 }
146
147 public void testIdentityEquivalent() {
148 EquivalenceTester.of(Equivalence.identity())
149 .addEquivalenceGroup(new Integer(42))
150 .addEquivalenceGroup(new Integer(42))
151 .addEquivalenceGroup("a")
152 .test();
153 }
154
155 public void testEquals() {
156 new EqualsTester()
157 .addEqualityGroup(Equivalence.equals(), Equivalence.equals())
158 .addEqualityGroup(Equivalence.identity(), Equivalence.identity())
159 .testEquals();
160 }
161
162 @GwtIncompatible("NullPointerTester")
163 public void testNulls() {
164 new NullPointerTester().testAllPublicStaticMethods(Equivalence.class);
165 new NullPointerTester().testAllPublicInstanceMethods(Equivalence.equals());
166 new NullPointerTester().testAllPublicInstanceMethods(Equivalence.identity());
167 }
168 }